iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0

今天主要會講的部分有

  • Enum
  • Generics

Enum

Enum作為一種數據類型,可以用來限制允許存放的數據。

例如底下 :

enum Ordertype{
	Market,
	Limit,
}

let order1 = Ordertype::Market;
let order2 = Ordertype::Limit;

Enum 還有 match 的功能如下

match order1 {
    Ordertype::Market => {
        // skip
    }

    Ordertype::Limit => {
        //skip
    }
}

還有一種用法是

match order1 {
    Ordertype::Market => {
        // skip
    }
    _ => {}
}

_ 作為 default 忽略其他種情況

Enum 不只可以做到這樣, Enum 還可以帶上參數或是 struct.

如下

enum Ordertype {
	Market(bool, u8),
	Limit(bool, u8),
}

let order1 = Ordertype:Market(true,100);
let order2 = Ordertype:Limit(true,105);

// 可以傳遞給其他函數 假設定義好 match 函數了
match(&order1);
match(&order2);

並且和和Struct類型一樣,也可以使用impl關鍵字為枚舉類型定義方法。

如下

enum Ordertype {
	Market { is_buy: bool, price: u8 },
	Limit  { is_buy: bool, price: u8 },
}

impl Ordertype {
    fn breakpoint(&self) -> bool {
        match self {
            Ordertype::Market { price, .. } | Ordertype::Limit { price, .. } => *price > 100,
        }
    }
}

Enum 跟 Struct 很像,可以根據場景自行選擇使用哪一個.

Generics

Generics 就稍微複雜了一些,但舉個例子,如果今天想要做數字加總,但 Rust 對於數字有明確的規定,不同型別的變數是不能相加的,那難道要每一個型別都寫一個函數嗎,聽起來就不合理對吧.

所以我們可以改成像底下這樣,使用泛型來取代函數宣告的型別.

use std::ops::Add;

fn add_two<T>(a: T, b: T) -> T
where
    T: Add<Output = T>,
{
    a + b
}

fn main() {
    println!("{}", add_two(3_i16, 5_i16)); // 8
    println!("{}", add_two(3_i32, 5_i32)); // 8
    println!("{}", add_two(2_u64, 7_u64)); // 9
    println!("{}", add_two(1.5_f32, 2.0_f32)); // 3.5
}

那其中

where
    T: Add<Output = T>,
{
    a + b
}

這段是為了給函數一些 constraints,否則 T 還可以接受像 bool 這種不能相加的變數,那這個 Add 其實就是一個特徵,我們昨天也有說到 trait 的一大功能就是可以做為 constraints,那也和 trait 一樣,如果想新增更多限制,就用 + 串連起來即可.

此外,在 struct 中也可以用泛型

struct Point<T> {
    x: T,
    y: T,
}

let int_point = Point { x: 1, y: 2 };
let float_point = Point { x: 1.5, y: 2.5 };

那今天就先講到這,因為 Rust 的 Struct, Enum , Trait , Generics之間都是有關聯性的,如果之後有時間會在往前把各種例子給補齊,明天主要說明 Rust 異布編程 和 tokio 框架.


上一篇
【Day8】- Rust(Lifetime, Trait)
下一篇
【Day10】- Rust(Tokio)
系列文
NautilusTrader 架構解析:Rust 在高效能量化交易平台中的角色與優勢22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言